package com.fengyun;

import com.fengyun.selfEditor.Customer;
import com.fengyun.selfbfpp.MyJavaBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author 风风
 * <p>
 * 循环依赖问题：
 * 1、 原型模式循环依赖  ----- 无法解决
 * 2、 单例bean循环依赖 ，构造参数产生依赖    ----- 无法解决
 * 3、 单例循环依赖，setter产生依赖 -----  可以解决
 * <p>
 * 单例循环依赖，setter产生依赖，可以解决
 * <p>
 * <p>
 * 原型模式和单例构造参数的循环依赖，无法解决，但是spring可以检测出来。通过currentlyCreationSet集合的唯一性。检测出循环依赖
 * <p>
 * 单例set的循环依赖，可以通过三级缓存解决循环依赖问题。
 */
public class Main {
	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-demo02.xml");
		User user = applicationContext.getBean("user", User.class);
		System.out.println(user);

		MyJavaBean myJavaBean = applicationContext.getBean("myJavaBean", MyJavaBean.class);
		System.out.println(myJavaBean);

//		UserService userService = (UserService) applicationContext.getBean("userService");
//		User user = userService.getBuId(1);
//		System.out.println(user);

//		Customer bean = applicationContext.getBean(Customer.class);
//		System.out.println(bean);

		// 使用注解的方式加载bean工厂
//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
	}
}
